home *** CD-ROM | disk | FTP | other *** search
/ PCMania 73 / PCMania CD73_1.iso / sharewar / varios / partial / REGALOS / VIRUS / DTA.TXT < prev    next >
Text File  |  1996-01-05  |  7KB  |  145 lines

  1.                      --- SERVICIOS AVANZADOS DE DISCO ---
  2.  
  3. Un usuario con los servicios básicos de acceso a ficheros (abrir,cerrar...)
  4. puede acceder con facilidad a un fichero una vez que conoce su nombre.
  5. Sin embargo gracias a servicios más avanzados de disco podemos obtener
  6. por ejemplo la lista de ficheros de un directorio, etc.
  7.  
  8. Estos servicios son ofrecidos por el sistema operativo (DOS), que devuelve
  9. los datos en un buffer denominado DTA ( Area de Transferencia de disco,
  10. o para los internacionales, Disk Transfer Area ). Estos datos se encuentran
  11. localizados al principio del bloque de memoria reservado para el programa.
  12. Más concretamente son los primeros 256 bytes de este bloque los que son
  13. utilizados por el DOS para pasar algunos datos a nuestro programa.
  14. El DTA se puede localizar a la entrada de nuestro código ya que en este
  15. momento el registro ES apunta a estos datos.
  16. Como acceder a ella?, el DTA se encuentra en el desplazamiento 80h
  17. por tanto según lo que busquemos así nos tendremos que desplazar dentro
  18. del DTA.
  19.  
  20. Imaginemos que buscamos un fichero por ejemplo COM, entonces le diremos
  21. al programa que busque el primer fichero que coincida con esta especificación,
  22. si lo encuentra, se pasa una cadena ASCIIZ ( es decir, el nombre del fichero
  23. más un último byte a 0 ). Entonces el DOS retorna en la DTA los datos del
  24. fichero encontrado, si por casualidad quisieramos seguir buscando ficheros,
  25. le diríamos al programa que buscara el proximo fichero coincidente ( esto
  26. se puede hacer mediante la función 4eh (Buscar la primera entrada) o
  27. 4fh (Buscar la próxima entrada), de la int.21h , por si acaso desconoces
  28. estas funciones se cargan en AH ). Si por el contrario no encuentra ningún
  29. fichero, retorna un código de error (activa el flag de acarreo), y más
  30. concretamente 12h en AX, con lo que la busqueda concluye.
  31.  
  32. Todo lo que podemos acceder a través del DTA queda mostrado en la siguiente
  33. tabla:
  34.  
  35. Desplazamiento ( a partir de 80h)   Longitud ( en Bytes )     Contenido
  36. ---------------------------------   ---------------------     ---------
  37.  
  38.                  0 d   o  0h                     21            Reservado
  39.  
  40.                 21 d   o  15h                     1            Atributos de fichero
  41.  
  42.                 22 d   o  16h                     2            Hora de creación
  43.  
  44.                 24 d   o  18h                     2            Fecha de creación
  45.  
  46.                 26 d   o  1Ah                     4            Tamaño
  47.  
  48.                 30 d   o  1Eh                    14            Nombre.ext ( en Ascciz )
  49.  
  50.  
  51. d -> valor decimal  h-> valor hexadecimal
  52.  
  53.  
  54. Los primeros 21 bytes de la DTA, después de invocar un servicio para la
  55. busqueda del primer fichero coincidente, son rellenados por el DOS con
  56. información para el uso de llamadas posteriores a la busqueda de otro
  57. archivo, por este motivo no se deben modificar. Los siguientes 22 bytes de
  58. DTA, contienen los datos del fichero coincidente encontrado, refiriéndonos
  59. a ellos según la tabla anterior. Por tanto, sólo los primeros 43 bytes
  60. son utilizados por estas llamadas al MS-DOS.
  61.  
  62. Por otro lado cuando queramos acceder a estos campos de la DTA, tendremos
  63. que tener en mente unas cuantas cuestiones:
  64.  
  65. a) La fecha está compuesta de dos bytes, de este modo la referencia
  66. de año,mes,dia en cuanto a los bits que componen los bytes de la fecha
  67. serían los siguientes:
  68.  
  69.           15........8.....5........0   Bits
  70.              Año      Mes    Dia
  71.  
  72. b) La hora está compuesta por dos bytes, al igual que la fecha, accedemos
  73. a sus datos del siguiente modo, teniendo en mente su localización:
  74.  
  75.           15........11.......5.......0   Bits
  76.               Hora    Minuto    Seg
  77.  
  78.  
  79. Ejemplos prácticos del uso del DTA
  80. ----------------------------------
  81.  
  82. Vamos ahora a explicar unas líneas de código del virus tratado que hace
  83. referencia al DTA:
  84.  
  85.  
  86.  
  87.         mov     cx, 43d                 ;Salva DTA original
  88.         lea     di, bp + DTA_orig
  89.         mov     si, 0080h
  90.         rep     movsb
  91.  
  92. Para que hace esto el virus tratado, es sencillo, mediante una instrucción
  93. rep movsb copia 43 bytes ( que vienen indicado en CX ) del desplazamiento
  94. 80h del segmento ES ( recorda que ES apunta al DTA al inicializar
  95. el programa y no tiene mayor problema ), es decir, copia los 43 bytes
  96. originales de la DTA, pues en cada llamada para buscar un fichero coincidente
  97. ya sea el primero u otro posterior, estos datos son actualizados con datos
  98. del fichero encontrado.
  99. De este modo el virus se asegura poder retornar el contenido exacto del DTA.
  100.  
  101.  
  102.  
  103.         mov     ax, 03d02h
  104.         mov     dx, 0009eh              ;Abre el file encontrado
  105.     int    021h
  106.  
  107. Con estas instrucciones el virus abre el fichero encontrado, en ax se encuentra
  108. la función oportuna, pero lo que nos interesa, en DX se muestra el desplazamiento
  109. para acceder al nombre del fichero a través de la DTA. El desplazamiento
  110. es 09eh, es decir, 80h + 30d ( = 1eh), por tanto os daréis cuenta que
  111. para acceder a un campo determinado se le suma al desplazamiento que apunta
  112. inicialmente al DTA ( 80h) el valor donde se encuentra la zona a consultar,
  113. de este modo 80h + 1eh = 09eh (1eh es el desplazamiento que indica el contenido
  114. del nombre.ext del fichero, es decir, 30d), de este modo obtenemos el nombre
  115. del fichero a través del DTA.
  116.  
  117.  
  118.         mov     cx, 2                   ;Calcula el jmp para el virus
  119.         mov     si, 009ah               ;(longitud del prog. + 1)
  120.         lea     di, bp + Longitud
  121.         rep     movsb
  122.         add     Longitud + bp,1
  123.  
  124. Por último vamos a ver estas líneas, aquí se muestra como el virus calcula
  125. la longitud para el jump que saltará al código del virus, pero bueno
  126. esto ahora no nos interesa, veamos su función con el DTA.
  127. En SI se encuentra el valor 09ah, que es igual a 80h + 26d ( = 1ah),
  128. 80h + 1ah = 09ah, de este modo accedemos al tamaño del fichero a través del
  129. DTA.
  130.  
  131. Como se pueden dar cuenta las utilidades del uso del DTA son cuantiosas,
  132. desde las mostradas hasta, por ejemplo, imaginen que interceptamos las
  133. funciones que tiene uso por ejemplo el comando DIR del DOS ( las funciones
  134. 11h y 12h de la int.21h). En este caso supongamos que tenemos un virus
  135. residente que cada vez que se llame a esta funciones acceda a través del
  136. DTA al fichero/os solicitados y obtenga su tamaño, le reste el tamaño
  137. del virus y lo guarde en su mismo lugar. De este modo el usuario mediante
  138. el comando DIR u otro comando que utilice estas funciones nunca se dará
  139. cuenta del incremento que tiene su fichero, pues el siempre verá el mismo.
  140. Como este procedimiento, todos los que os imaginéis....
  141.  
  142. Bueno con esto hay suficiente, hasta el próximo número.
  143.  
  144.                                                                HANDLER
  145.